using System;
using System.Collections;
using System.Collections.Generic;
using Me.Prettyprint.Cassandra.Utils;
using Me.Prettyprint.Hector.Api.Beans;

namespace Me.Prettyprint.Hector.Api
{
	public interface HColumnFamily<K, N> : ResultStatus
	{
        HColumnFamily<K, N> SetReadConsistencyLevel(HConsistencyLevel readLevel);
        HColumnFamily<K, N> SetWriteConsistencyLevel(HConsistencyLevel writeLevel);
        HColumnFamily<K, N> AddKey(K key);
        HColumnFamily<K, N> AddKeys(List<K> keys);
        HColumnFamily<K, N> RemoveKeys(); 
        HColumnFamily<K, N> Clear();
        HColumnFamily<K, N> SetStart(N name);
        HColumnFamily<K, N> SetFinish(N name);
        HColumnFamily<K, N> SetCount(int count);
        HColumnFamily<K, N> SetReversed(bool reversed);
        HColumnFamily<K, N> SetColumnNames(List<N> columnNames);
        HColumnFamily<K, N> AddColumnName(N columnName);
        List<HColumn<N, byte[]>> GetColumns();
        HColumn<N,object> GetColumn(N name);
        string GetString(N name);
        int GetInt(N name);
        long GetLong(N name);
        Guid GetUUID(N name);
        DateTime GetDate(N name);
        double GetDouble(N name);
        V GetValue<V>(N name, Serializer<V> valueSerializer);
	}
}